﻿/*
 * Created by SharpDevelop.
 * User: it1050
 * Date: 16/08/10
 * Time: 23.17
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Data;
using System.Data.Common;
using PNDbManagement;
using IniWrapper;

namespace PN
{
	/// <summary> Mask principale del programma. </summary>
	public partial class MainForm : Form
	{
		#region Variables
		public static PNDBDataInterface _gvDibi;
		#endregion

		#region Form
		public MainForm()
		{
			// The InitializeComponent() call is required for Windows Forms designer support.
			InitializeComponent();
		}
		
		void MainFormLoad(object sender, EventArgs e)
		{
			fLoadLastFile();  //carico ultimo db utilizzato
		}
				
		void BarDBTextChanged(object sender, EventArgs e)
		{ //se creo/apro un db viene impostato un nuovo valore nel bar nome db
			//  eseguo allora le operazioni per abilitare i menù
			MenuActivation();
		}
		
		#endregion
		
		# region Custom functions
		
		/// <summary>	Leggo/scrivo il file ini per le impostazioni di base </summary>
    /// <value>  _pAction: 	set = salva i settaggi, get = legge i settaggi </value>
    /// <value>  _pSection: nome sezione da leggere/scrivere </value>
    /// <value>  _pKey: 		key da leggere/scrivere </value>
    public string fManageINI(string _pAction, string _pSection, string _pKey)
    {
    	//recupero il nome completo del file INI presumendo sia presente nella stessa cartella dell exe
    	string _lvFname= System.IO.Path.GetDirectoryName(Application.ExecutablePath.ToString())+"\\PN.ini";
    	if (File.Exists(_lvFname))
    	{
    	  IniFile Ini = new IniFile(_lvFname);
        if ( _pAction == "set") //lettura dati
      	{
        	//scrivo nel file la il valore alla sezione indicata
  	    	Ini.IniWriteValue(_pSection, _pKey, _gvDibi._pDBFullName);
        	return "Done";
	      }
  	    else
    	  {
	      	//recupero la chiave richiesta dalla sezione indicata
	        return Ini.IniReadValue(_pSection, _pKey);;
      	} //scrittura dati
    	}
    	else
    		return "ERR";
    } //fManageINI
    
    /// <summary> Carica il file aperto nella sessione precedene del programma </summary>
    private void fLoadLastFile()
		{
    	//ricerco nel file ini il nome dell'ultimo DB
    	string _lvDbFname;
    	
    	_lvDbFname = fManageINI("get", "DB", "Lastfile");
			if (File.Exists(_lvDbFname)) 
			{
				if (MessageBox.Show("Open last file?", "Confirm", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
        {
					if (_gvDibi == null) //evito la creazione di un'ulteriore istanza dell'oggetto
						_gvDibi = new PNDBDataInterface();	
					_gvDibi._pDBFullName = _lvDbFname;
					_gvDibi.fDBConnect();
        } 
			}
		} //fLoadLastFile
       
		/// <summary> apro un file e lo connetto come DB </summary>
		void sMnuOpenDB()
		{
			if (dlgOpen.ShowDialog() == DialogResult.OK)
			{
				if (_gvDibi == null) //evito la creazione di un'ulteriore istanza dell'oggetto
					_gvDibi = new PNDBDataInterface();
				_gvDibi._pDBFullName = dlgOpen.FileName;
				//ativo la conneesione con il db
				if ( _gvDibi.fDBConnect()) 
				{
					barDB.Text = dlgOpen.FileName;	
				}
				else
				{
					MessageBox.Show("Impossible to Connect To Database!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
				}
			}
		} // sMnuOpen
		
		/// <summary> richiamo le procedure per creare un DB </summary>
		void sMnuCreateDB()
		{
			if (dlgSave.ShowDialog() == DialogResult.OK)
      {
				if (_gvDibi == null) //evito la creazione di un'ulteriore istanza dell'oggetto
					_gvDibi = new PNDBDataInterface();
				_gvDibi._pDBFullName = dlgSave.FileName;
				
				//creo un nuovo DB
				if (_gvDibi.fDBCreateNew() )
				{
					barDB.Text = dlgSave.FileName;		
				}
				else
				{
					MessageBox.Show("Impossible to Create a new Database!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
				}
				
			}
		} //Creazione nuovo DB
		
		/// <summary> enable/disable menù a seconda se sia aperto o meno un db </summary>
		void MenuActivation()
		{
			if (barDB.Text=="No DB") 
			{
				baseDataToolStripMenuItem.Enabled			=false;
				transactionsToolStripMenuItem.Enabled	=false;
				reportToolStripMenuItem.Enabled				=false;
			}
			else
			{
				baseDataToolStripMenuItem.Enabled			=true;
				transactionsToolStripMenuItem.Enabled	=true;
				reportToolStripMenuItem.Enabled				=true;
			}
		} // menu activation
		
		#endregion
		
		#region Menu calls
		void Button1Click(object sender, EventArgs e)
		{
			//test per creazione dati
			
		}
		
		void NewToolStripMenuItemClick(object sender, EventArgs e)
		{
			sMnuCreateDB();
		}
		
		void OpenToolStripMenuItemClick(object sender, EventArgs e)
		{
			sMnuOpenDB();
		}
		
		void ChatOfAccountToolStripMenuItemClick(object sender, EventArgs e)
		{
			frmdbChartAccounts lFrm = new frmdbChartAccounts();
			lFrm.MdiParent=this; //imposto il riferimento alla form pincipale
			lFrm.Show();
		}
		#endregion
		
	} //Class MainForm
} //namespace
            		